iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0
自我挑戰組

轉職新手學 Django 及 DRF系列 第 20

Day 20 - 製作 API (二) User 相關端點

  • 分享至 

  • xImage
  •  

今天來進行 user 端點的製作。

Create User API

以功能來說跟之前的專案很類似,差別只在於介面,除此之外,API 還會加上授權的功能。首先,先創建一個 User app,並加入settings.py中:

python manage.py startapp user

再來,我們要建立一個可以處理 JSON 資料的程式,在 rest_api/user 中創建serializer.py檔案,並加入:

"""
Serializers for the user API View.
"""
from django.contrib.auth import get_user_model

from rest_framework import serializers


class UserSerializer(serializers.ModelSerializer):
    """Serializer for the user object."""

    class Meta:
        model = get_user_model()
        fields = ['email', 'password', 'name']
        # 特定欄位的額外資訊,此處指定密碼最少五個字元長且只供讀取
        extra_kwargs = {'password': {'write_only': True, 'min_length': 5}}

    # 覆蓋原本 model 的create 函式,資料要先通過上方驗證才會由此函式創建
    # 預設create是直接創建
    def create(self, validated_data):
        """Create and return a user with encrypted password."""
        return get_user_model().objects.create_user(**validated_data)

ModelSerializer 可對應至特定 model 進行序列化,省去自己定義的時間,在 DRF 內建的其他 Serializer 還有以下,每種都有不同的應用場景:

  • Serializer
  • HyperlinkedModelSerializer
  • ListSerializer
  • BaseSerializer

更多資訊可參考這

get_user_model() 可指定 ModelSerializer 要使用的 Model,此處指向 User。fields 指定了要處理的欄位,此處為 email, password 及 name。當客戶端 POST 資料時,Serializer 便會驗證 email, password 及 name 欄位是否正確。接著在views.py可導入此 serializer 並製作創建使用者 view:

"""
Views for the API.
"""

from rest_framework import generics
from user.serializers import UserSerializer


class CreateUserView(generics.CreateAPIView):
    """Create a new user in the system."""
    serializer_class = UserSerializer

這邊指定 UserSerializer 為創建使用者時使用的 view。最後在 user 中創建urls.py並加入 path:

"""
URL mappings for the user API.
"""
from django.urls import path

from user import views

app_name = 'user'

urlpatterns = [
    path('create/', views.CreateUserView.as_view(), name='create'),
]

這邊也是使用 class,所以要記得用as_view()。最後到 rest_api/urls.py 中加入 user 的 url:

# ...
from django.urls import path, include



urlpatterns = [
    # ...
    path('api/user/', include('user.urls')),
]

結束後儲存,接著可以啟動伺服器測試,就可以看到多了一個端點了。

結語

完成了第一個端點後,後續的進度就會快上一些,接下來會介紹及完成驗證的功能。下一篇文章見~


上一篇
Day 19 - 製作 API (一)
下一篇
Day 21 - 中場暫停(一) API 的驗證方法
系列文
轉職新手學 Django 及 DRF30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言